﻿Imports EVOLTA.Promocion.Bl.Bc
Imports EVOLTA.Promocion.Bl.Be
Imports EVOLTA.Promocion.Bl.Ctrl
Imports System.Windows.Forms
Imports System.Drawing.Printing
Imports System.IO
Imports System.Web.Services
Imports System.Web.Script.Services
Imports System.Web.Services.Protocols

<ScriptService()> _
Partial Class gestionComercial_proforma
    Inherits System.Web.UI.Page
    Implements System.Web.UI.ICallbackEventHandler

    Private entidades As List(Of EentidadFin) = Nothing
    Private proformas As List(Of EproformaCabecera) = Nothing
    Private proformasDetalle As List(Of EproformaDetalle) = Nothing
    Private inmuebles As New List(Of EunidInmobiliarias)
    Private financiamientos As New List(Of Edescuento)
    Private programados As New List(Of Edescuento)
    Private propiedades As New List(Of Edescuento)
    Private simuladorCtas As List(Of EsimuladorCta) = Nothing
    Private vValoresMontos As String = Nothing
    Private jsMensaje As String = Nothing
    Private descuentos As New List(Of Edescuento)

#Region "           Formulario                              "
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Response.Cache.SetExpires(DateTime.Now.AddSeconds(1200))
        If Not IsPostBack Then
            Dim evolta As Eevolta = CType(Session("sEVOLTA"), Eevolta)
            If Not evolta Is Nothing Then
                evolta.chkVisible = True
                Session("sEVOLTA") = evolta
            Else
                Response.Redirect(ConfigurationManager.AppSettings("cerrar").ToString)
            End If
            'Pre Carga el Descuento para Sala de Ventas -- MPE
            Dim pDscto As Edescuento = Rdescuento.SeleccionarTodoXIdProyecto(Me.Master.descEmpresa, 1, Me.Master.idProyecto)
            If Not pDscto Is Nothing Then
                txtPMaxDsctoSala.Value = pDscto.dsctoMax.ToString()
                selSala.Value = pDscto.idDscto.ToString()
            End If
            hdfIdProyecto.Value = Me.Master.idProyecto
            hdfProyecto.Value = Me.Master.descProyecto
            hdfIdEtapa.Value = Me.Master.idEtapa
            hdfEmpresa.Value = Me.Master.descEmpresa.Trim
            hdfIdUsuario.Value = Me.Master.idUsuario
            hdfNuevo.Value = "nuevo"
            limpiarSession()
            divddlTpoDcmto()
            divddlSexo()
            divddlEstadoCivil()
            divddlDepartamento()
            divddlOcupacion()
            divddlInmueblesDisponibles()
            divddlRangoEdad()
            divddlVendedor()
            divddlNivelInteres()
            divddlComoSeEntero()
            divddlFormaContacto()
            divddlPerfilCrediticios()
            divddlCorredora()
            divddlEntidadFinancieras()
            divddlTpoUsoInmueble()
            divddlTipoInmueble()
            divSelSala()
            divSelFinan()
            divSelProgram()
            divSelPropi()
            'cargarAdicionales()
            'cargarAdicionales2()
            'MPE

            Dim wDiasValidezSeparacion As String
            Dim wSettingConfig As String = "DiasValidezSeparacion_" + UCase(hdfEmpresa.Value)



            If IsNothing(ConfigurationManager.AppSettings(wSettingConfig)) Then
                wDiasValidezSeparacion = "0"
            Else
                wDiasValidezSeparacion = ConfigurationManager.AppSettings(wSettingConfig).ToString()
            End If

            Dim wFecha As Date
            Dim wDia As String, wMes As String

            If wDiasValidezSeparacion <> "0" Then
                Dim wNumDias As Integer = Int(wDiasValidezSeparacion)
                wFecha = Now.AddDays(wNumDias)
                wDia = "0" & wFecha.Day.ToString
                wDia = Right(wDia, 2)
                wMes = "0" & wFecha.Month.ToString
                wMes = Right(wMes, 2)
                imgFechaDscto.Enabled = False
                imgFechaDscto.Visible = False
                txtFchDscto.Text = wDia & "/" & wMes & "/" & wFecha.Year.ToString
            Else
                wFecha = Now.AddDays(1)
                wDia = "0" & wFecha.Day.ToString
                wDia = Right(wDia, 2)
                wMes = "0" & wFecha.Month.ToString
                wMes = Right(wMes, 2)
                imgFechaDscto.Enabled = True
                txtFchDscto.Text = ""
            End If

            selProvincia.Items.Add(New ListItem("-- SELECCIONAR --", "00"))
            selDepartamento.Attributes.Add("onchange", "if (this.options[this.selectedIndex].value == '00') {document.getElementById('ctl00_ContentPlaceHolder1_selDistrito').length=1;document.getElementById('ctl00_ContentPlaceHolder1_selProvincia').length=1;} else {document.getElementById('ctl00_ContentPlaceHolder1_selDistrito').length=1;CallTheServer('divddlProvincia@TN@' + this.options[this.selectedIndex].value + '00')};return false;")
            selProvincia.Attributes.Add("onchange", "if (this.options[this.selectedIndex].value == '00') {document.getElementById('ctl00_ContentPlaceHolder1_selDistrito').length=1;}else CallTheServer('divddlDistrito@TN@' + document.getElementById('ctl00_ContentPlaceHolder1_selDepartamento').value + this.options[this.selectedIndex].value + '00');return false;")
            txtMontoInicial.Attributes.Add("onKeyUp", "CalculaFinanciamiento()")
            txtNroAños.Attributes.Add("onKeyUp", "CalculaCuota()")
            txtCuotaInicial.Attributes.Add("onKeyUp", "CalculaPorcentaje()")
            txtSCPrecioInmueble.Attributes.Add("onKeyUp", "saldoFinanciar(); return false;")
            txtSCCtaInicial.Attributes.Add("onKeyUp", "saldoFinanciar(); return false;")
            txtSCPlazo.Attributes.Add("onKeyUp", "SCCalculaCuota()")
            txtSCPlazoMiVivienda.Attributes.Add("onKeyUp", "SCCalculaCuotaBono()")
            txtSCBono.Attributes.Add("onKeyUp", "SCCalculaCuotaBono()")
            gvwLista.DataSource = Nothing
            gvwLista.DataBind()
            gvwDscto.DataSource = Nothing
            gvwDscto.DataBind()
            Dim cbReference As String
            cbReference = Page.ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveServerData", "null", True)
            Dim callbackScript As String = ""
            callbackScript &= "function CallTheServer(arg)" & _
                              "{" & cbReference & "; }"
            Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "CallTheServer", callbackScript, True)
        End If

    End Sub
    <System.Web.Services.WebMethod(EnableSession:=True, cacheduration:=70)> _
    <System.Web.Script.Services.ScriptMethod()> _
    <System.Web.Script.Services.GenerateScriptType(GetType(EposibleCliente))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(EtpoDcmto))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(EestadoCivil))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(Eubigeo))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(Eocupacion))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(ErangoEdad))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(Evendedor))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(EnivelInteres))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(EcomoSeEntero))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(EformaContacto))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(EperfilCrediticio))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(Ecorredora))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(EtpoUsoInmueble))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(EentidadFin))> _
    <System.Web.Script.Services.GenerateScriptType(GetType(EproformaCabecera))> _
    Public Shared Function btnGrabarProf(ByVal pPosCliente As EposibleCliente, ByVal pProformaCabecera As EproformaCabecera, _
                                         ByVal pNuevo As String, ByVal pEmpresa As String) As String
        Dim resultado As Boolean = False
        Dim idProforma As Int32 = 0
        Dim nroProforma As String = Nothing
        If pProformaCabecera.totalMontoFinal > 0 Then
            Dim ev As New evoltaProcesos
            resultado = ev.saveProforma(pPosCliente, pProformaCabecera, pNuevo, pEmpresa, idProforma)
            If pNuevo = "nuevo" Then
                nroProforma = "Proforma Nro: [" & idProforma.ToString.PadLeft(5, "00000") & "]"
            Else
                nroProforma = "Proforma Nro: [" & pProformaCabecera.idProforma.ToString.Trim.PadLeft(5, "00000") & "]"
            End If
        End If
        Return resultado.ToString + "@" + idProforma.ToString.Trim + "@" + nroProforma
    End Function
    Protected Sub btnSeleccionar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSeleccionar.Click

        Dim chk As CheckBox
        Dim opcion As EperfilOpciones = Nothing
        Dim arr As String() = Nothing
        Dim resultado As String = Nothing
        Dim jsMensaje As String = Nothing

        Dim idAdicional As Int32

        idAdicional = CType(hdfIdAdicional.Value, Int32)
        resultado = Radicionales.SeleccionarTipo(Me.Master.descEmpresa, idAdicional)
        'For Each gvw As GridViewRow In gvwPerfilOpciones.Rows
        '    chk = CType(gvw.FindControl("chkSeleccionar"), CheckBox)
        '    If chk.Checked Then
        '        Dim dato As String = CType(gvw.Cells(0).FindControl("lnkModulo"), LinkButton).CommandArgument
        '        arr = Split(CType(gvw.Cells(0).FindControl("lnkModulo"), LinkButton).CommandArgument, " ")
        '        opcion = New EperfilOpciones _
        '        With { _
        '            .idPerfil = CType(hdidPerfil.Value, Int32), _
        '            .idModulo = CType(arr(0).ToString, Int32), _
        '            .idSubModulo = CType(arr(1).ToString, Int32), _
        '            .idOpcion = CType(arr(2).ToString, Int32), _
        '            .seleccionar = 1, _
        '            .idUsuario = Me.Master.idUsuario _
        '        }
        '        resultado = RperfilOpciones.Añadir(Me.Master.descEmpresa, opcion)
        '    End If
        'Next
        If resultado Then
            jsMensaje = "<script>javascript:alert(' Se registro correctamente.');</script>)"
            Controls.Add(New LiteralControl(jsMensaje))
            cargarAdicionalesXTipo(CType(resultado, String))
        Else
            jsMensaje = "<script>javascript:alert('No se pudo registrar.');</script>)"
            Controls.Add(New LiteralControl(jsMensaje))
        End If
    End Sub
    Private Sub cargarAdicionalesXTipo(ByVal ptipoCasa As String)
        Dim pAdicionales As List(Of Eadicionales) = Nothing

        pAdicionales = Radicionales.SeleccionarTodoxTipo(Me.Master.descEmpresa, ptipoCasa)
        If Not pAdicionales Is Nothing Then
            gvwPerfilOpciones.DataSource = pAdicionales
            gvwPerfilOpciones.DataBind()
            UpdatePanel4.Update()
        End If
    End Sub
    Private Sub limpiarSession()
        Me.sDetalleProforma = Nothing
        Me.UnidadesSeleccionadas = Nothing
        Me.SimuladorCuotas = Nothing
        Me.sProformaDescuento = Nothing
        Session("BuscarPosCliente") = Nothing
    End Sub
#End Region

#Region "           Combos                                  "
    Private Sub divddlTpoDcmto()
        selTpoDcmto.DataSource = RtpoDcmto.SeleccionarTodo(Me.Master.descEmpresa, True)
        selTpoDcmto.DataTextField = "descTpoDcmto"
        selTpoDcmto.DataValueField = "idTpoDcmto"
        selTpoDcmto.DataBind()
    End Sub
    Private Sub divddlSexo()
        Dim Esexo As New Ecommons
        selSexo.DataSource = Esexo.sexo
        selSexo.DataTextField = "descripcion"
        selSexo.DataValueField = "codigo"
        selSexo.DataBind()
    End Sub
    Private Sub divddlEstadoCivil()
        selEstadoCivil.DataSource = RestadoCivil.SeleccionarTodo(Me.Master.descEmpresa, True)
        selEstadoCivil.DataTextField = "desEstCivil"
        selEstadoCivil.DataValueField = "idEstCivil"
        selEstadoCivil.DataBind()
    End Sub
    Private Sub divddlDepartamento()
        selDepartamento.DataSource = Rubigeo.SeleccionarTodoXDepartamento(Me.Master.descEmpresa, True)
        selDepartamento.DataTextField = "descripcion"
        selDepartamento.DataValueField = "idUbigeo"
        selDepartamento.DataBind()
        selDepartamento.Value = "20"

        selProvincia.DataSource = Rubigeo.SeleccionarTodoXProvincia(Me.Master.descEmpresa, True, "20")
        selProvincia.DataTextField = "descripcion"
        selProvincia.DataValueField = "idUbigeo"
        selProvincia.DataBind()
        selProvincia.Value = "04"

        selDistrito.DataSource = Rubigeo.SeleccionarTodoXDistrito(Me.Master.descEmpresa, True, "20", "04")
        selDistrito.DataTextField = "descripcion"
        selDistrito.DataValueField = "idUbigeo"
        selDistrito.DataBind()
        selDistrito.Value = "01"
    End Sub
    Private Sub divddlOcupacion()
        selOcupacion.DataSource = Rocupacion.SeleccionarXEstado(Me.Master.descEmpresa, True)
        selOcupacion.DataTextField = "descOcupacion"
        selOcupacion.DataValueField = "idOcupacion"
        selOcupacion.DataBind()
    End Sub
    Private Sub divddlRangoEdad()
        selRangoEdad.DataSource = RrangoEdad.SeleccionarXEstado(Me.Master.descEmpresa, True)
        selRangoEdad.DataTextField = "rangoEdad"
        selRangoEdad.DataValueField = "idRangoEdad"
        selRangoEdad.DataBind()
    End Sub
    Private Sub divddlVendedor()
        selVendedor.DataSource = Rvendedor.SeleccionarXEstado(Me.Master.descEmpresa, True)
        selVendedor.DataTextField = "NombresCompletos"
        selVendedor.DataValueField = "idVendedor"
        selVendedor.DataBind()
    End Sub
    Private Sub divddlNivelInteres()
        selNivelInteres.DataSource = RnivelInteres.SeleccionarXEstado(Me.Master.descEmpresa, True)
        selNivelInteres.DataTextField = "descNivelInteres"
        selNivelInteres.DataValueField = "idNivelInteres"
        selNivelInteres.DataBind()
    End Sub
    Private Sub divddlComoSeEntero()
        selComoSeEntero.DataSource = RcomoSeEntero.SeleccionarXEstado(Me.Master.descEmpresa, True)
        selComoSeEntero.DataTextField = "descComoseEntero"
        selComoSeEntero.DataValueField = "idComoSeEntero"
        selComoSeEntero.DataBind()
    End Sub
    Private Sub divddlFormaContacto()
        selFormaContacto.DataSource = RformaContacto.SeleccionarXEstado(Me.Master.descEmpresa, True)
        selFormaContacto.DataTextField = "descFormaContacto"
        selFormaContacto.DataValueField = "idFormaContacto"
        selFormaContacto.DataBind()
    End Sub
    Private Sub divddlPerfilCrediticios()
        selPerfilCrediticio.DataSource = RperfilCrediticio.SeleccionarXEstado(Me.Master.descEmpresa, True)
        selPerfilCrediticio.DataTextField = "descPerfilCrediticio"
        selPerfilCrediticio.DataValueField = "idPerfilCrediticio"
        selPerfilCrediticio.DataBind()
    End Sub
    Private Sub divddlCorredora()
        selCorredora.DataSource = Rcorredora.SeleccionarXEstado(Me.Master.descEmpresa, True)
        selCorredora.DataTextField = "NombresCompletos"
        selCorredora.DataValueField = "idCorredora"
        selCorredora.DataBind()
    End Sub
    Private Sub divddlEntidadFinancieras()
        entidades = RentFinanciera.SeleccionarXEstado(Me.Master.descEmpresa, True)
        selEntidadFinanciera.DataSource = entidades
        selEntidadFinanciera.DataTextField = "descEntidadFin"
        selEntidadFinanciera.DataValueField = "idEntidadFin"
        selEntidadFinanciera.DataBind()
        selEntidadFinSimuladorCta.DataSource = entidades
        selEntidadFinSimuladorCta.DataTextField = "descEntidadFin"
        selEntidadFinSimuladorCta.DataValueField = "idEntidadFin"
        selEntidadFinSimuladorCta.DataBind()
        Session("listaEntidadesFinancieras") = entidades
    End Sub
    Private Sub divddlTpoUsoInmueble()
        selTpoUsoInmueble.DataSource = RtpoUsoInmueble.SeleccionarXEstado(Me.Master.descEmpresa, True)
        selTpoUsoInmueble.DataTextField = "descTpoUsoInmueble"
        selTpoUsoInmueble.DataValueField = "idTpoUsoInmueble"
        selTpoUsoInmueble.DataBind()
    End Sub
    Private Sub divddlTipoInmueble()
        selTipoInmueble.DataSource = RtpoInmueble.SeleccionarTodo(Me.Master.descEmpresa, True)
        selTipoInmueble.DataTextField = "descTpoInmueble"
        selTipoInmueble.DataValueField = "idTpoInmueble"
        selTipoInmueble.DataBind()
    End Sub
    Private Sub divSelSala() 'Combo Financiamiento
        'Dim idTpoDescuento As Integer = 1
        'financiamientos = Rdescuento.SeleccionarDescuentoxTipo(Me.Master.descEmpresa, False, Me.Master.idProyecto, idTpoDescuento)
        'selSala.DataSource = From financiamiento As Edescuento In financiamientos _
        '                                     Where financiamiento.estado = 1 _
        '                                     Select financiamiento
        'selSala.DataTextField = "descDscto"
        'selSala.DataValueField = "idDscto"
        'selSala.DataBind()
        'selSala.Items.Insert(0, New ListItem("-- SELECCIONAR --", "0"))
    End Sub
    Private Sub divSelFinan() 'Combo Financiamiento
        Dim idTpoDescuento As Integer = 2
        financiamientos = Rdescuento.SeleccionarDescuentoxTipo(Me.Master.descEmpresa, False, Me.Master.idProyecto, idTpoDescuento)
        selFinan.DataSource = From financiamiento As Edescuento In financiamientos _
                                             Where financiamiento.estado = 1 _
                                             Select financiamiento
        selFinan.DataTextField = "descDscto"
        selFinan.DataValueField = "idDscto"
        selFinan.DataBind()
        selFinan.Items.Insert(0, New ListItem("-- SELECCIONAR --", "0"))
    End Sub
    Private Sub divSelProgram() 'Combo Programa
        Dim idTpoDescuento As Integer = 3
        programados = Rdescuento.SeleccionarDescuentoxTipo(Me.Master.descEmpresa, False, Me.Master.idProyecto, idTpoDescuento)
        selProgram.DataSource = From programado As Edescuento In programados _
                                             Where programado.estado = 1 _
                                             Select programado
        selProgram.DataTextField = "descDscto"
        selProgram.DataValueField = "idDscto"
        selProgram.DataBind()
        selProgram.Items.Insert(0, New ListItem("-- SELECCIONAR --", "0"))
    End Sub
    Private Sub divSelPropi() 'Combo Propiedades
        Dim idTpoDescuento As Integer = 4
        propiedades = Rdescuento.SeleccionarDescuentoxTipo(Me.Master.descEmpresa, False, Me.Master.idProyecto, idTpoDescuento)
        selPropi.DataSource = From propiedad As Edescuento In propiedades _
                                             Where propiedad.estado = 1 _
                                             Select propiedad
        selPropi.DataTextField = "descDscto"
        selPropi.DataValueField = "idDscto"
        selPropi.DataBind()
        selPropi.Items.Insert(0, New ListItem("-- SELECCIONAR --", "0"))
    End Sub
#End Region

#Region "           Combo Inmueble                          "
    Private Sub divddlInmueblesDisponibles()
        inmuebles = RunidInmobiliarias.SeleccionarXEstado(Me.Master.descEmpresa, False, Me.Master.idProyecto, Me.Master.idEtapa)
        selInmueblesDisponibles.DataSource = From inmueble As EunidInmobiliarias In inmuebles _
                                             Where inmueble.EestadoInmueble.idEstadoInmueble = 1 _
                                             Select inmueble
        selInmueblesDisponibles.DataTextField = "InmueblesDisponibles"
        selInmueblesDisponibles.DataValueField = "idEdimznModeloUndInmob"
        selInmueblesDisponibles.DataBind()
        selInmueblesDisponibles.Items.Insert(0, "-- SELECCIONAR --")
    End Sub
    'Private Sub cargarAdicionales()
    '    Dim propiedades As List(Of Eadicionales) = Nothing
    '    propiedades = Radicionales.SeleccionarCasa(Me.Master.descEmpresa, False, Me.Master.idProyecto)
    '    selAdici.DataSource = propiedades
    '    selAdici.DataTextField = "tituloAdicional"
    '    selAdici.DataValueField = "idAdicional"
    '    selAdici.DataBind()
    '    selAdici.Items.Insert(0, New ListItem("-- SELECCIONAR --", "0"))
    'End Sub
    'Private Sub cargarAdicionales2()
    '    Dim pAdicionalMejoras As List(Of Eadicionales) = Nothing
    '    pAdicionalMejoras = Radicionales.SeleccionarAdicionales(Me.Master.descEmpresa, False, Me.Master.idProyecto)
    '    If Not pAdicionalMejoras Is Nothing Then
    '        'gvwPerfilOpciones.DataSource = Ropciones.SeleccionarTodoXEstado(Me.Master.descEmpresa)
    '        gvwPerfilOpciones.DataSource = pAdicionalMejoras
    '        gvwPerfilOpciones.DataBind()
    '    End If
    'End Sub
#End Region

#Region "          Datos del Posible Cliente                "
    Protected Sub gvwPosClientes_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
    Handles gvwPosClientes.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then
            e.Row.Attributes.Add("OnMouseOver", "Resaltar_On(this);")
            e.Row.Attributes.Add("OnMouseOut", "Resaltar_Off(this);")
            e.Row.Style.Add("cursor", "hand")
        End If
    End Sub
#End Region

#Region "          Descuento Detalle               "
    Private Property sDetalleDescuento() As List(Of Edescuento)
        Get
            If Session("detalleDescuento") Is Nothing Then
                Return Nothing
            Else
                Return Session("detalleDescuento")
            End If
        End Get
        Set(ByVal value As List(Of Edescuento))
            Session("detalleDescuento") = value
        End Set
    End Property
    Private Sub seleccionarDescuentos()
        Dim jsMensaje As String
        Try
            Dim descuento As New Edescuento
            With descuento
                .idProyecto = Me.Master.idProyecto
                .descuentos = Me.DescuentosSeleccionados
            End With
            agregarDescuento(Rdescuento.consultaDescuento(Me.Master.descEmpresa, descuento))
        Catch ex As Exception
            jsMensaje = "<script>javascript:alert('Se produjo una excepción, no se puedo cargar los descuentos seleccionados.');</script>)"
            Controls.Add(New LiteralControl(jsMensaje))
        End Try
    End Sub

    Private Property DescuentosSeleccionados() As String
        Get
            If Session("strDetalleDscto") Is Nothing Then
                Return Nothing
            Else
                Return Session("strDetalleDscto").ToString().Trim()
            End If
        End Get
        Set(ByVal value As String)
            Session("strDetalleDscto") = value
        End Set
    End Property

    Private Sub agregarDescuento(ByVal pDescuento As List(Of Edescuento))
        descuentos = New List(Of Edescuento)

        gvwDscto.DataSource = pDescuento
        gvwDscto.DataBind()
        Me.descuentos = pDescuento
        descuentos = pDescuento
        'mostrarDescuento(descuentos)
    End Sub

#End Region

#Region "          Datos de Proforma                        "
    <WebMethod()> _
    Public Function filtrarProforma(ByVal prefixText As String, ByVal count As Int32) As String()
        Dim pProforma = New EproformaCabecera
        With pProforma
            .idProyecto = Me.Master.idProyecto
            .idEtapa = Me.Master.idEtapa
            .filtro = prefixText
        End With
        Dim clientes = From p In RproformaCabecera.Filtrar(Me.Master.descEmpresa, pProforma) _
                       Select p.nombreCompletosPosCliente
        Return clientes.ToArray
    End Function
#End Region

#Region "          Datos de Proforma Detalle                "
    Private Property sDetalleProforma() As List(Of EproformaDetalle)
        Get
            If Session("detalleProforma") Is Nothing Then
                Return Nothing
            Else
                Return Session("detalleProforma")
            End If
        End Get
        Set(ByVal value As List(Of EproformaDetalle))
            Session("detalleProforma") = value
        End Set
    End Property
    Enum estadoInmueble
        disponible = 1
        separacion = 2
        ctaInicial = 3
        financiamiento = 4
        cancelada = 5
        entregado = 6
        temporal = 7
        inic_fincCancelado = 8
        venta = 9
    End Enum
    Private Function validarSeleccion(ByVal unds As String) As Boolean
        Dim strSeleccion As String = unds
        If strSeleccion.Equals("") Then
            jsMensaje = "<script>javascript:alert('Seleccione un Inmueble.');</script>)"
            Controls.Add(New LiteralControl(jsMensaje))
            Return False
        End If
        proformasDetalle = New List(Of EproformaDetalle)
        proformasDetalle = Me.sDetalleProforma
        If Not proformasDetalle Is Nothing Then
            For Each pd As EproformaDetalle In proformasDetalle
                If strSeleccion.IndexOf(pd.idEdificio.ToString.Trim + ":" + pd.idModelo.ToString.Trim + "-" + pd.idUndInmob.ToString.Trim) <> -1 Then
                    jsMensaje = "<script>javascript:alert('Ya se seleccionó el inmueble '" + pd.descUndInmob + ");</script>)"
                    Controls.Add(New LiteralControl(jsMensaje))
                    Return False
                End If
            Next
        End If
        If Not Me.UnidadesSeleccionadas Is Nothing Then
            Me.UnidadesSeleccionadas += "," + unds
            Me.UnidadesSeleccionadas = Me.UnidadesSeleccionadas.Replace(",,", ",")
        Else
            Me.UnidadesSeleccionadas = unds
        End If
        Return True
    End Function
    Private Sub seleccionarUnidades()
        Dim jsMensaje As String
        Try
            Dim unidad As New EunidInmobiliarias
            With unidad
                .idProyecto = Me.Master.idProyecto
                .idEtapa = Me.Master.idEtapa
                .inmuebles = Me.UnidadesSeleccionadas
            End With
            agregarUnidadInmueble(RproformaDetalle.consultaInmueble(Me.Master.descEmpresa, unidad))
        Catch ex As Exception
            jsMensaje = "<script>javascript:alert('Se produjo una excepción, no se puedo cargar los inmuebles seleccionados.');</script>)"
            Controls.Add(New LiteralControl(jsMensaje))
        End Try
    End Sub
    Private Property UnidadesSeleccionadas() As String
        Get
            If Session("strDetalle") Is Nothing Then
                Return Nothing
            Else
                Return Session("strDetalle").ToString().Trim()
            End If
        End Get
        Set(ByVal value As String)
            Session("strDetalle") = value
        End Set
    End Property
    Private Sub agregarUnidadInmueble(ByVal pProformaDetalle As List(Of EproformaDetalle))
        proformasDetalle = New List(Of EproformaDetalle)
        If Not Me.sDetalleProforma Is Nothing Then
            proformasDetalle = Me.sDetalleProforma
        End If
        Dim montoDscto As Decimal = (From countPd As EproformaDetalle In pProformaDetalle _
                                     Where countPd.idTpoInmueble = 1 OrElse countPd.idTpoInmueble = 2 _
                                     Select countPd.monto).Sum()
        If Me.sProformaDescuento IsNot Nothing AndAlso Me.sProformaDescuento.Count > 0 Then
            For Each dscto As EproformaDscto In Me.sProformaDescuento
                dscto.idProyecto = Me.Master.idProyecto
                dscto.idEtapa = Me.Master.idEtapa
                dscto.monto = montoDscto
                dscto.dsctoMonto = dscto.monto - (dscto.monto * dscto.dscto / 100)
                dscto.idUsuario = Me.Master.idUsuario
                montoDscto = dscto.dsctoMonto
            Next
            If Me.sProformaDescuento.Count > 0 Then
                Dim pdt = From vPdt As EproformaDetalle In pProformaDetalle _
                          Where vPdt.idTpoInmueble = 1 OrElse vPdt.idTpoInmueble = 2
                pdt.ElementAt(0).dsctoMonto = pdt.ElementAt(0).monto - montoDscto
                pdt.ElementAt(0).total = montoDscto
            End If
        End If
        gvwLista.DataSource = pProformaDetalle
        gvwLista.DataBind()
        Me.sDetalleProforma = pProformaDetalle
        proformasDetalle = pProformaDetalle
        mostrarDetalleProforma(proformasDetalle)
    End Sub
    Private Sub mostrarDetalleProforma(ByVal pProformaDetalle As List(Of EproformaDetalle))
        Dim monto As Decimal = 0
        Dim total As Decimal = 0
        Dim bonoTechoPropio As Decimal = 0

        For Each pd As EproformaDetalle In pProformaDetalle
            monto += Convert.ToDecimal(pd.monto)
            total += Convert.ToDecimal(pd.total)
            bonoTechoPropio += Convert.ToDecimal(pd.bonoTechoPropio)
            pd.idUsuario = Me.Master.idUsuario
        Next
        vValoresMontos = monto.ToString("###,##0.00") + "@" + _
                         total.ToString("###,##0.00") + "@" + _
                         (Convert.ToDecimal(total) * 0.1).ToString("###,##0.00") + "@" + _
                         (Convert.ToDecimal(total) - Convert.ToDecimal(total * 0.1)).ToString("###,##0.00") + "@" + _
                         bonoTechoPropio.ToString("###,##0.00")
    End Sub
    Protected Sub gvwLista_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _
    Handles gvwLista.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then
            e.Row.Attributes.Add("OnMouseOver", "Resaltar_On(this);")
            e.Row.Attributes.Add("OnMouseOut", "Resaltar_Off(this);")
            e.Row.Style.Add("cursor", "hand")
        End If
    End Sub
    Private Function updateUnidadInmuebleXDscto(ByVal pProformaDetalle As List(Of EproformaDetalle)) As String
        Dim sr As New System.IO.StringWriter()
        Dim htm As New HtmlTextWriter(sr)
        gvwLista.DataSource = pProformaDetalle
        gvwLista.DataBind()
        gvwLista.RenderControl(htm)
        mostrarDetalleProforma(pProformaDetalle)
        htm.Flush()
        Return sr.ToString()
    End Function
#End Region

#Region "          Descuento                                "
    Private Property sProformaDescuento() As List(Of EproformaDscto)
        Get
            If Session("ProformaDescuento") Is Nothing Then
                Return Nothing
            Else
                Return Session("ProformaDescuento")
            End If
        End Get
        Set(ByVal value As List(Of EproformaDscto))
            Session("ProformaDescuento") = value
        End Set
    End Property
    Protected Sub gvwDscto_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvwDscto.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then
            e.Row.Attributes.Add("OnMouseOver", "Resaltar_On(this);")
            e.Row.Attributes.Add("OnMouseOut", "Resaltar_Off(this);")
            e.Row.Style.Add("cursor", "hand")
        End If
    End Sub
    Private Function updateGridDscto(ByVal pProformaDscto As List(Of EproformaDscto)) As String
        Dim sr As New System.IO.StringWriter()
        Dim htm As New HtmlTextWriter(sr)
        gvwDscto.DataSource = pProformaDscto
        gvwDscto.DataBind()
        gvwDscto.RenderControl(htm)
        htm.Flush()
        Return sr.ToString()
    End Function
#End Region

#Region "          Simulador Cta                            "
    Private Property SimuladorCuotas() As List(Of EsimuladorCta)
        Get
            If Session("SimuladorCuotas") Is Nothing Then
                Return Nothing
            Else
                Return Session("SimuladorCuotas")
            End If
        End Get
        Set(ByVal value As List(Of EsimuladorCta))
            Session("SimuladorCuotas") = value
        End Set
    End Property
    Protected Sub gvwSCDetalle_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gvwSCDetalle.RowCommand
        Select Case e.CommandName
            Case "Delete"
                simuladorCtas = Me.SimuladorCuotas
                If simuladorCtas IsNot Nothing AndAlso simuladorCtas.Count > 0 Then
                    SimuladorCuotas.RemoveAt(e.CommandArgument - 1)
                    Me.SimuladorCuotas = simuladorCtas
                    gvwSCDetalle.DataSource = Me.SimuladorCuotas
                    gvwSCDetalle.DataBind()
                End If
        End Select
    End Sub
    Protected Sub gvwSCDetalle_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvwSCDetalle.RowDataBound
        If e.Row.RowType = DataControlRowType.DataRow Then
            e.Row.Attributes.Add("OnMouseOver", "Resaltar_On(this);")
            e.Row.Attributes.Add("OnMouseOut", "Resaltar_Off(this);")
            e.Row.Style.Add("cursor", "hand")
        End If
    End Sub
#End Region

#Region "          CallBack                                 "
    Private _callbackArgument As String
    Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
        Return _callbackArgument
    End Function
    Public Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
        Try
            If eventArgument <> String.Empty Then
                Dim varParams() As String = eventArgument.Split("@")
                Dim sr As New System.IO.StringWriter()
                Dim htm As New HtmlTextWriter(sr)
                _callbackArgument = ""
                Select Case varParams(0)
                    Case "divNuevaProforma"
                        limpiarSession()
                    Case "divddlProvincia"
                        selProvincia.DataSource = Rubigeo.SeleccionarTodoXProvincia(Me.Master.descEmpresa, True, varParams(2).ToString.Substring(0, 2))
                        selProvincia.DataTextField = "descripcion"
                        selProvincia.DataValueField = "idUbigeo"
                        selProvincia.DataBind()
                        selProvincia.Value = varParams(2).ToString.Substring(2, 2)
                        If varParams(1).Substring(0, 1).Equals("F") AndAlso Not varParams(1).Substring(1, 1).Equals("N") Then
                            selProvincia.Disabled = True
                        Else
                            selProvincia.Disabled = False
                        End If
                        selProvincia.RenderControl(htm)
                        htm.Flush()
                        _callbackArgument = varParams(0).ToString + "|" + sr.ToString()
                    Case "divddlDistrito"
                        selDistrito.DataSource = Rubigeo.SeleccionarTodoXDistrito(Me.Master.descEmpresa, True, varParams(2).ToString.Substring(0, 2), varParams(2).ToString.Substring(2, 2))
                        selDistrito.DataTextField = "descripcion"
                        selDistrito.DataValueField = "idUbigeo"
                        selDistrito.DataBind()
                        selDistrito.Value = varParams(2).ToString.Substring(4, 2)
                        If varParams(1).Substring(0, 1).Equals("F") AndAlso Not varParams(1).Substring(1, 1).Equals("N") Then
                            selDistrito.Disabled = True
                        Else
                            selDistrito.Disabled = False
                        End If
                        selDistrito.RenderControl(htm)
                        htm.Flush()
                        _callbackArgument = varParams(0).ToString + "|" + sr.ToString()
                    Case "divgvwLista"
                        Dim pProforma As New EproformaCabecera With {.idProyecto = Me.Master.idProyecto, .idEtapa = Me.Master.idEtapa, .idProforma = Convert.ToInt32(varParams(2))}
                        Me.sDetalleProforma = RproformaDetalle.Filtrar(hdfEmpresa.Value, pProforma)
                        Me.gvwLista.DataSource = Me.sDetalleProforma
                        Me.gvwLista.DataBind()
                        If varParams(1).Substring(0, 1).Equals("F") AndAlso Not varParams(1).Substring(1, 1).Equals("N") Then
                            Me.gvwLista.Enabled = False
                        Else
                            Me.gvwLista.Enabled = True
                        End If
                        Me.gvwLista.RenderControl(htm)
                        htm.Flush()
                        _callbackArgument = varParams(0).ToString + "|" + sr.ToString()
                    Case "divgvwPerfilOpciones"
                        Dim resultado As String = Nothing
                        resultado = Radicionales.SeleccionarTipo(Me.Master.descEmpresa, varParams(1).ToString)
                        cargarAdicionalesXTipo(CType(resultado, String))
                        _callbackArgument = varParams(0).ToString + "|" + varParams(0).ToString + "|" + sr.ToString()
                    Case "divgvwDscto"
                        Dim pProforma As New EproformaCabecera With {.idProyecto = Me.Master.idProyecto, .idEtapa = Me.Master.idEtapa, .idProforma = Convert.ToInt32(varParams(2))}
                        Me.sProformaDescuento = RproformaDscto.Filtrar(hdfEmpresa.Value, pProforma)
                        Me.gvwDscto.DataSource = Me.sProformaDescuento
                        Me.gvwDscto.DataBind()
                        If varParams(1).Substring(0, 1).Equals("F") AndAlso Not varParams(1).Substring(1, 1).Equals("N") Then
                            Me.gvwDscto.Enabled = False
                        Else
                            Me.gvwDscto.Enabled = True
                        End If
                        Me.gvwDscto.RenderControl(htm)
                        htm.Flush()
                        _callbackArgument = varParams(0).ToString + "|" + sr.ToString()
                    Case "divCalculaDsctoSala"
                        Dim pDscto As Edescuento = Rdescuento.SeleccionarTodoXId(Me.Master.descEmpresa, CType(varParams(1), Int32))
                        _callbackArgument = varParams(0).ToString + "|divCalculaDsctoSala|" + pDscto.dsctoMin.ToString() + "|" + pDscto.dsctoMax.ToString()
                    Case "divDsctoMaxSala"
                        Dim pDscto As Edescuento = Rdescuento.SeleccionarTodoXId(Me.Master.descEmpresa, CType(varParams(1), Int32))
                        _callbackArgument = varParams(0).ToString + "|divRangoDsctoSala|" + pDscto.dsctoMin.ToString() + "|" + pDscto.dsctoMax.ToString()
                    Case "divRangoDsctoSala"
                        Dim pDscto As Edescuento = Rdescuento.SeleccionarTodoXId(Me.Master.descEmpresa, CType(varParams(1), Int32))
                        _callbackArgument = varParams(0).ToString + "|divRangoDsctoSala|" + pDscto.dsctoMin.ToString() + "|" + pDscto.dsctoMax.ToString()
                    Case "divRangoDsctoFinan"
                        Dim pDscto As Edescuento = Rdescuento.SeleccionarTodoXId(Me.Master.descEmpresa, CType(varParams(1), Int32))
                        _callbackArgument = varParams(0).ToString + "|divRangoDsctoFinan|" + pDscto.dsctoMin.ToString() + "|" + pDscto.dsctoMax.ToString()
                    Case "divRangoDsctoProgram"
                        Dim pDscto As Edescuento = Rdescuento.SeleccionarTodoXId(Me.Master.descEmpresa, CType(varParams(1), Int32))
                        _callbackArgument = varParams(0).ToString + "|divRangoDsctoProgram|" + pDscto.dsctoMin.ToString() + "|" + pDscto.dsctoMax.ToString()
                    Case "divRangoDsctoPropi"
                        Dim pDscto As Edescuento = Rdescuento.SeleccionarTodoXId(Me.Master.descEmpresa, CType(varParams(1), Int32))
                        _callbackArgument = varParams(0).ToString + "|divRangoDsctoPropi|" + pDscto.dsctoMin.ToString() + "|" + pDscto.dsctoMax.ToString()
                    Case "SeleccionarDescuento"
                        Dim countDep As Int32 = 0
                        Dim countTotal As Int32 = 0
                        
                        DescuentosSeleccionados() = varParams(1).ToString
                        seleccionarDescuentos()
                        Me.gvwDscto.RenderControl(htm)
                        htm.Flush()
                        _callbackArgument = "divSaveDscto|divSaveDscto|Add|" + sr.ToString()
                    Case "divSaveDscto"
                        proformasDetalle = Me.sDetalleProforma
                        Dim countDep = (From countPd As EproformaDetalle In proformasDetalle _
                                        Where countPd.idTpoInmueble = 2 OrElse countPd.idTpoInmueble = 1).Count()
                        If proformasDetalle IsNot Nothing AndAlso proformasDetalle.Count > 0 Then
                            Dim pProformaDescto As List(Of EproformaDscto) = Me.sProformaDescuento
                            If pProformaDescto Is Nothing Then
                                pProformaDescto = New List(Of EproformaDscto)
                            End If
                            Dim montoDscto As Decimal = (From countPd As EproformaDetalle In proformasDetalle _
                                                         Where countPd.idTpoInmueble = 1 OrElse countPd.idTpoInmueble = 2 _
                                                         Select countPd.monto).Sum()
                            Dim pd As New EproformaDscto
                            Dim pd1 As New EproformaDscto
                            Dim pd2 As New EproformaDscto
                            Dim pd3 As New EproformaDscto

                            If pProformaDescto.Count > 0 Then
                                For Each dscto As EproformaDscto In pProformaDescto
                                    dscto.idProyecto = Me.Master.idProyecto
                                    dscto.idEtapa = Me.Master.idEtapa
                                    dscto.monto = montoDscto
                                    dscto.dsctoMonto = dscto.monto * dscto.dscto / 100 'MPE
                                    dscto.idUsuario = Me.Master.idUsuario
                                    montoDscto = dscto.monto - (dscto.monto * dscto.dscto / 100)
                                Next
                            End If

                            Dim dscDscto = (From chk As EproformaDscto In pProformaDescto).Count()

                            If countDep > 0 Then
                                If countDep < 2 Then
                                    'Descuento en Sala de Ventas
                                    If CType(varParams(1), Int32) > 0 And dscDscto = 0 Then
                                        pd.idProformaDscto = CType((Now.Hour.ToString + Now.Month.ToString + Now.Second.ToString), Int32)
                                        pd.idDscto = CType(varParams(1), Int32)
                                        pd.descDscto = CType(varParams(2), String)
                                        pd.dsctoMin = 0
                                        pd.dsctoMax = 0
                                        pd.monto = montoDscto
                                        pd.dscto = CType(varParams(3), Decimal)
                                        pd.dsctoMonto = pd.monto * pd.dscto / 100
                                        montoDscto = pd.monto - pd.dsctoMonto
                                        pd.idUsuario = Me.Master.idUsuario
                                        pProformaDescto.Add(pd)
                                    End If

                                    If CType(varParams(4), Int32) > 0 And dscDscto = 0 Then
                                        pd1.idProformaDscto = CType((Now.Hour.ToString + Now.Month.ToString + Now.Second.ToString + "2"), Int32)
                                        pd1.idDscto = CType(varParams(4), Int32)
                                        pd1.descDscto = CType(varParams(5), String)
                                        pd1.dsctoMin = 0
                                        pd1.dsctoMax = 0
                                        pd1.monto = montoDscto
                                        pd1.dscto = CType(varParams(6), Decimal)
                                        pd1.dsctoMonto = pd1.monto * pd1.dscto / 100
                                        montoDscto = pd1.monto - pd1.dsctoMonto
                                        pd1.idUsuario = Me.Master.idUsuario
                                        pProformaDescto.Add(pd1)
                                    End If
                                    If CType(varParams(7), Int32) > 0 And dscDscto = 0 Then
                                        pd2.idProformaDscto = CType((Now.Hour.ToString + Now.Month.ToString + Now.Second.ToString + "3"), Int32)
                                        pd2.idDscto = CType(varParams(7), Int32)
                                        pd2.descDscto = CType(varParams(8), String)
                                        pd2.dsctoMin = 0
                                        pd2.dsctoMax = 0
                                        pd2.monto = montoDscto
                                        pd2.dscto = CType(varParams(9), Decimal)
                                        pd2.dsctoMonto = pd2.monto * pd2.dscto / 100
                                        montoDscto = pd2.monto - pd2.dsctoMonto
                                        pd2.idUsuario = Me.Master.idUsuario
                                        pProformaDescto.Add(pd2)
                                    End If
                                    If CType(varParams(10), Int32) > 0 And dscDscto = 0 Then
                                        pd3.idProformaDscto = CType((Now.Hour.ToString + Now.Month.ToString + Now.Second.ToString + "4"), Int32)
                                        pd3.idDscto = CType(varParams(10), Int32)
                                        pd3.descDscto = CType(varParams(11), String)
                                        pd3.dsctoMin = 0
                                        pd3.dsctoMax = 0
                                        pd3.monto = montoDscto
                                        pd3.dscto = CType(varParams(12), Decimal)
                                        pd3.dsctoMonto = pd3.monto * pd3.dscto / 100
                                        montoDscto = pd3.monto - pd3.dsctoMonto
                                        pd3.idUsuario = Me.Master.idUsuario
                                        pProformaDescto.Add(pd3)

                                    End If
                                    If pProformaDescto.Count > 0 Then
                                        Dim pdt = From vPdt As EproformaDetalle In Me.sDetalleProforma _
                                                  Where vPdt.idTpoInmueble = 1 OrElse vPdt.idTpoInmueble = 2
                                        pdt.ElementAt(0).dsctoMonto = pdt.ElementAt(0).monto - montoDscto
                                        pdt.ElementAt(0).total = montoDscto
                                    End If
                                    Me.sProformaDescuento = pProformaDescto
                                    gvwDscto.DataSource = pProformaDescto
                                    gvwDscto.DataBind()
                                    gvwDscto.RenderControl(htm)
                                    htm.Flush()
                                    _callbackArgument = "divSaveDscto|divSaveDscto|Add|" + countDep.ToString + "|" + sr.ToString() + "|" + updateUnidadInmuebleXDscto(Me.sDetalleProforma) + "|" + vValoresMontos
                                Else
                                    _callbackArgument = "divSaveDscto|divSaveDscto|Add|" + countDep.ToString + "| "
                                End If
                            End If
                        End If
                    Case "divEliminarDscto"
                        Dim pProformaDesctoOld As List(Of EproformaDscto) = Me.sProformaDescuento
                        Dim pProformaDesctoNew As List(Of EproformaDscto) = Nothing
                        Dim montoDscto As Decimal = (From countPd As EproformaDetalle In Me.sDetalleProforma _
                                                     Where countPd.idTpoInmueble = 1 OrElse countPd.idTpoInmueble = 2 _
                                                     Select countPd.monto).Sum()
                        If pProformaDesctoOld.Count > 0 Then
                            pProformaDesctoNew = New List(Of EproformaDscto)
                            For Each dscto As EproformaDscto In pProformaDesctoOld
                                dscto.idProyecto = Me.Master.idProyecto
                                dscto.idEtapa = Me.Master.idEtapa
                                dscto.monto = montoDscto
                                dscto.dsctoMonto = dscto.monto * dscto.dscto / 100
                                dscto.idUsuario = Me.Master.idUsuario
                                montoDscto = dscto.monto - dscto.dsctoMonto
                                pProformaDesctoNew.Remove(dscto)
                            Next
                        End If

                        If pProformaDesctoOld.Count > 0 Then
                            Dim pdt = From vPdt As EproformaDetalle In Me.sDetalleProforma _
                                      Where vPdt.idTpoInmueble = 1 OrElse vPdt.idTpoInmueble = 2
                            pdt.ElementAt(0).dsctoMonto = 0
                            pdt.ElementAt(0).total = pdt.ElementAt(0).monto
                        End If

                        Me.sProformaDescuento = pProformaDesctoNew
                        gvwDscto.DataSource = pProformaDesctoNew
                        gvwDscto.DataBind()
                        gvwDscto.RenderControl(htm)
                        htm.Flush()
                        _callbackArgument = "divSaveDscto|divSaveDscto|Del|" + pProformaDesctoNew.Count().ToString + "|" + sr.ToString() + "|" + updateUnidadInmuebleXDscto(Me.sDetalleProforma) + "|" + vValoresMontos
                    Case "divNuevaProforma"
                        limpiarSession()
                    Case "divInmueblesDisponibles"
                        Dim countDep As Int32 = 0
                        Dim countTotal As Int32 = 0
                        If Me.sProformaDescuento IsNot Nothing AndAlso Me.sProformaDescuento.Count > 0 Then
                            If Me.sDetalleProforma IsNot Nothing Then
                                countDep = (From countPd As EproformaDetalle In Me.sDetalleProforma _
                                            Where countPd.idTpoInmueble = 2 OrElse countPd.idTpoInmueble = 1).Count()
                                Dim unidad As New EunidInmobiliarias With {.idProyecto = Me.Master.idProyecto, .idEtapa = Me.Master.idEtapa, .inmuebles = CType(varParams(1), String)}
                                countTotal = countDep + RunidInmobiliarias.consultaInmuebleXtpo(Me.Master.descEmpresa, unidad)
                            End If
                        End If
                        If countTotal < 2 Then
                            If validarSeleccion(CType(varParams(1), String)) Then
                                seleccionarUnidades()
                            End If
                        Else
                            seleccionarUnidades()
                        End If
                        Me.gvwLista.RenderControl(htm)
                        htm.Flush()

                        '**** MPE
                        Dim montoDscto As Decimal = (From countPd As EproformaDetalle In Me.sDetalleProforma _
                                                     Where countPd.idTpoInmueble = 1 OrElse countPd.idTpoInmueble = 2 _
                                                     Select countPd.monto).Sum()
                        vValoresMontos = vValoresMontos + "@" + montoDscto.ToString("###,##0.00")
                        '*** FIN MPE

                        _callbackArgument = "divgvwLista" + "|mostrarMontoDetalle|" + vValoresMontos + "|cb|Add|" + countTotal.ToString + "||" + sr.ToString()
                    Case "SeleccionarInmueble"
                        Dim countDep As Int32 = 0
                        Dim countTotal As Int32 = 0
                        If Me.sProformaDescuento IsNot Nothing AndAlso Me.sProformaDescuento.Count > 0 Then
                            If Me.sDetalleProforma IsNot Nothing Then
                                countDep = (From countPd As EproformaDetalle In Me.sDetalleProforma _
                                            Where countPd.idTpoInmueble = 2 OrElse countPd.idTpoInmueble = 1).Count()
                                Dim unidad As New EunidInmobiliarias With {.idProyecto = Me.Master.idProyecto, .idEtapa = Me.Master.idEtapa, .inmuebles = CType(varParams(1), String)}
                                countTotal = countDep + RunidInmobiliarias.consultaInmuebleXtpo(Me.Master.descEmpresa, unidad)
                            End If
                        End If
                        If countTotal < 2 Then
                            If validarSeleccion(varParams(1).ToString) Then
                                seleccionarUnidades()
                            Else
                                mpConsulta.Show()
                            End If
                        Else
                            seleccionarUnidades()
                        End If

                        '**** MPE
                        Dim montoDscto As Decimal = 1000 '(From countPd As EproformaDetalle In Me.sDetalleProforma _
                        'Where countPd.idTpoInmueble = 1 OrElse countPd.idTpoInmueble = 2 _
                        'Select countPd.monto).Sum()
                        vValoresMontos = vValoresMontos + "@" + montoDscto.ToString("###,##0.00")
                        '*** FIN MPE

                        Me.tblInmueble.Visible = False
                        Me.tblInmueble.Controls.Clear()
                        upEdificio.Update()
                        mpConsulta.Hide()
                        Me.gvwLista.RenderControl(htm)
                        htm.Flush()
                        _callbackArgument = "divgvwLista" + "|mostrarMontoDetalle|" + vValoresMontos + "|pnl|Add|" + countTotal.ToString + "||" + sr.ToString()
                    Case "divMostrar"
                        Dim pIdProyecto As Int32 = Me.Master.idProyecto
                        Dim pIdEtapa As Int32 = Me.Master.idEtapa
                        Dim selTpoInmueble As Int32 = varParams(1)
                        Dim edificios As List(Of EedificioManz) = RedificioManz.SeleccionarTodo(Me.Master.descEmpresa, False, pIdProyecto, pIdEtapa, selTpoInmueble)
                        Dim inmuebles As List(Of EunidInmobiliarias) = RunidInmobiliarias.SeleccionarTodoXAll(Me.Master.descEmpresa, False, pIdProyecto, pIdEtapa)
                        Dim mensaje As New StringBuilder
                        Dim pisos As Integer = 0
                        Dim piso As Integer = 0
                        tblInmueble.BorderWidth = 2
                        tblInmueble.BackColor = Drawing.Color.FromArgb(244, 244, 244)
                        tblInmueble.BorderColor = Drawing.Color.FromArgb(147, 147, 147)
                        Dim tc1 As Integer = 0
                        Dim tr As New TableRow()
                        For tc1 = 0 To edificios.Count - 1
                            Dim tc As New TableCell()
                            Dim tInterna As New Table With {.BorderWidth = 1, .CellSpacing = 0, .CellPadding = 0, .BackColor = Drawing.Color.FromArgb(244, 244, 244), _
                                                            .BorderColor = Drawing.Color.FromArgb(147, 147, 147), .BorderStyle = BorderStyle.Fixed3D}
                            Dim f As New TableRow With {.TableSection = TableRowSection.TableHeader, .CssClass = "captionInmueble"}
                            Dim c As New TableCell With {.ColumnSpan = 10, .Text = edificios.ElementAt(tc1).nomEdiMzn, .HorizontalAlign = HorizontalAlign.Center}
                            f.Controls.Add(c)
                            tInterna.Controls.Add(f)
                            Dim qtInmubXPiso = From d In inmuebles _
                                               Where d.idEdiMzn = edificios.Item(tc1).idEdiMzn _
                                               Order By d.nroPiso _
                                               Group d By d.nroPiso _
                                               Into Count()
                            Dim qtInmubles = From d In inmuebles _
                                             Where d.idEdiMzn = edificios.Item(tc1).idEdiMzn _
                                             Order By d.nroPiso
                            For ff As Integer = qtInmubXPiso.Count - 1 To 0 Step -1
                                Dim fila As New TableRow
                                fila.Height = 3
                                fila.Width = 7
                                fila.BorderColor = Drawing.Color.FromArgb(147, 147, 147)
                                fila.BorderWidth = 1
                                fila.BorderStyle = BorderStyle.Fixed3D
                                For Each inmub In qtInmubles
                                    piso = inmub.nroPiso
                                    If piso = qtInmubXPiso(ff).nroPiso Then
                                        Dim columna As New TableCell
                                        columna.BorderColor = Drawing.Color.FromArgb(147, 147, 147)
                                        columna.BorderWidth = 1
                                        columna.BorderStyle = BorderStyle.Fixed3D
                                        columna.EnableViewState = False
                                        Dim tableColor As New Table
                                        tableColor.CellPadding = 0
                                        tableColor.CellSpacing = 0
                                        tableColor.HorizontalAlign = HorizontalAlign.Center
                                        tableColor.EnableViewState = False
                                        Dim tcfLeyenda As New TableRow
                                        tcfLeyenda.Width = 50%
                                        tcfLeyenda.Height = 6
                                        tcfLeyenda.EnableViewState = False
                                        Dim tccLeyenda As New TableCell With {.EnableViewState = False}
                                        Dim tcFila As New TableRow With {.EnableViewState = False}
                                        Dim tcColm As New TableCell With {.EnableViewState = False}
                                        Select Case inmub.EestadoInmueble.idEstadoInmueble & inmub.tpoGestion
                                            Case estadoInmueble.separacion & "1"
                                                tcColm.CssClass = "UnidadesSeparacion"
                                                tccLeyenda.CssClass = ""
                                            Case estadoInmueble.ctaInicial & "1"
                                                tcColm.CssClass = "UnidadesSinMinuta"
                                                tccLeyenda.CssClass = ""
                                            Case estadoInmueble.financiamiento & "1"
                                                tcColm.CssClass = "UnidadesSinMinuta"
                                                tccLeyenda.CssClass = ""
                                            Case estadoInmueble.cancelada & "1"
                                                tcColm.CssClass = "UnidadesSinMinuta"
                                                tccLeyenda.CssClass = ""
                                            Case estadoInmueble.inic_fincCancelado & "1"
                                                tcColm.CssClass = "UnidadesSinMinuta"
                                                tccLeyenda.CssClass = ""
                                            Case estadoInmueble.separacion & "2"
                                                tcColm.CssClass = "UnidadesNegociado"
                                                tccLeyenda.CssClass = ""
                                            Case estadoInmueble.ctaInicial & "2"
                                                tcColm.CssClass = "UnidadesNegociado"
                                                tccLeyenda.CssClass = "ctaInicial"
                                            Case estadoInmueble.financiamiento & "2"
                                                If inmub.idFormaPago <> 3 Then
                                                    tcColm.CssClass = "UnidadesNegociado"
                                                    tccLeyenda.CssClass = "financiamiento"
                                                Else
                                                    tcColm.CssClass = "UnidadesNegociado"
                                                    tccLeyenda.CssClass = "financiamientoDirecto"
                                                End If
                                            Case estadoInmueble.inic_fincCancelado & "2"
                                                tcColm.CssClass = "UnidadesNegociado"
                                                tccLeyenda.CssClass = "ctaInicial_FinacCancelado"
                                            Case estadoInmueble.cancelada & "2"
                                                tcColm.CssClass = "UnidadesCancelada"
                                                tccLeyenda.CssClass = ""
                                            Case estadoInmueble.entregado & "2"
                                                tcColm.CssClass = "UnidadesNegociado"
                                                tccLeyenda.CssClass = "entregado"
                                            Case estadoInmueble.temporal & "0"
                                                tcColm.CssClass = "UnidadesTemporal"
                                                tccLeyenda.CssClass = ""
                                            Case estadoInmueble.venta & "2"
                                                tcColm.CssClass = "UnidadesNegociado"
                                                tccLeyenda.CssClass = ""
                                            Case Else
                                                If inmub.bloqueado = 1 Then
                                                    tcColm.CssClass = "UnidadesBloqueado"
                                                    tccLeyenda.CssClass = ""
                                                Else
                                                    tcColm.CssClass = "UnidadesDisponibles"
                                                    tccLeyenda.CssClass = ""
                                                End If
                                        End Select
                                        mensaje.Append(inmub.descTpoInmueble.Trim & "&nbsp;[N°&nbsp;" & inmub.nroInmueble.Trim)
                                        'mensaje.Append("]*Precio:&nbsp;" & inmub.valorVenta.ToString.Trim)
                                        mensaje.Append("]*Precio:&nbsp;" & inmub.valorVenta.ToString("#,###,##0.00"))
                                        mensaje.Append("*Código CUH:&nbsp;" & inmub.NroCertificado)
                                        If inmub.BonoTechoPropio > 0 Then
                                            mensaje.Append("*Bono Techo Propio:&nbsp;" & inmub.BonoTechoPropio.ToString("#,###,##0.00"))
                                        Else
                                            mensaje.Append("*Bono Techo Propio:&nbsp;--")
                                        End If
                                        mensaje.Append("*Moneda:" & inmub.descMoneda.Trim)
                                        If inmub.bloqueado = 1 Then
                                            mensaje.Append("*Estado:&nbsp;BLOQUEADO")
                                        Else
                                            mensaje.Append("*Estado:&nbsp;" & inmub.EestadoInmueble.descEstadoInmueble.Trim)
                                        End If
                                        mensaje.Append("*Cliente:&nbsp;" & inmub.clienteVenta.Trim)
                                        mensaje.Append("*Número&nbsp;de&nbsp;baño:&nbsp;" & inmub.EmodeloInmueble.nroBaños.ToString)
                                        mensaje.Append("*Número&nbsp;de&nbsp;habitación:&nbsp;" & inmub.EmodeloInmueble.nroHabitaciones.ToString)
                                        mensaje.Append("*Área&nbsp;construida:&nbsp;" & inmub.areaConstruida.ToString)
                                        mensaje.Append("*Área&nbsp;Terraza&nbsp;Jardin:&nbsp;" & inmub.areaVendible.ToString)
                                        mensaje.Append("*Tiene&nbsp;patio&nbsp;/&nbsp;jardín&nbsp;/&nbsp;terraza:&nbsp;")
                                        Select Case inmub.EmodeloInmueble.patioJardin
                                            Case 0 : mensaje.Append("NO")
                                            Case 1 : mensaje.Append("SI")
                                        End Select
                                        mensaje.Append("*Área&nbsp;patio&nbsp;/&nbsp;jardín&nbsp;/&nbsp;terraza:&nbsp;" & inmub.EmodeloInmueble.areaPatio.ToString)
                                        If tccLeyenda.CssClass.Length > 0 Then
                                            tcfLeyenda.Cells.Add(tccLeyenda)
                                            tableColor.Rows.Add(tcfLeyenda)
                                        End If
                                        If inmub.EestadoInmueble.idEstadoInmueble = estadoInmueble.disponible AndAlso inmub.bloqueado = 0 Then
                                            Dim chk As New System.Web.UI.HtmlControls.HtmlInputCheckBox
                                            chk.ID = "checkBox" & inmub.idEdiMzn.ToString.Trim _
                                                                & inmub.EmodeloInmueble.idModelo.ToString.Trim _
                                                                & inmub.idUndInmob.ToString.Trim _
                                                                & inmub.nroInmueble.Trim
                                            chk.Attributes.Add("onclick", "seleccionarUnidad(" + inmub.idEdiMzn.ToString.Trim + "," _
                                                                                               + inmub.EmodeloInmueble.idModelo.ToString.Trim + "," _
                                                                                               + inmub.idUndInmob.ToString.Trim + ",this)")
                                            tcColm.Controls.Add(chk)
                                            Dim literal As New LiteralControl
                                            literal.EnableViewState = False
                                            literal.Text = inmub.nroInmueble.Trim
                                            tcColm.Controls.Add(literal)
                                        Else
                                            tcColm.Text = inmub.nroInmueble.Trim
                                        End If
                                        tcFila.Cells.Add(tcColm)
                                        tableColor.Rows.Add(tcFila)
                                        columna.Controls.Add(tableColor)
                                        columna.Attributes.Add("onmouseover", "showMsg(this,'" & mensaje.ToString & "',event)")
                                        columna.Attributes.Add("onmouseout", "hideMsg()")
                                        fila.Cells.Add(columna)
                                        mensaje.Length = 0
                                    End If
                                Next
                                tInterna.Controls.Add(fila)
                            Next
                            tc.Controls.Add(tInterna)
                            tc.VerticalAlign = VerticalAlign.Top
                            tr.Cells.Add(tc)
                            tblInmueble.Rows.Add(tr)
                        Next tc1
                        upEdificio.Update()
                        Me.tblInmueble.RenderControl(htm)
                        htm.Flush()
                        _callbackArgument = varParams(0).ToString + "|divMostrar|" + sr.ToString()
                    Case "divEliminarInmueble"
                        Dim arr As String() = Split(varParams(1).ToString, ",")
                        Dim idTpo As Int32 = 0
                        proformasDetalle = Me.sDetalleProforma
                        Dim LproformaDetalle As Generic.IEnumerable(Of EproformaDetalle) = Nothing
                        LproformaDetalle = From dp In proformasDetalle _
                                            Where dp.idEdificio = CType(arr(0).ToString, Int32) AndAlso _
                                                  dp.idModelo = CType(arr(1).ToString, Int32) AndAlso _
                                                  dp.idUndInmob = CType(arr(2).ToString, Int32) _
                                            Select dp
                        idTpo = LproformaDetalle.ElementAt(0).idTpoInmueble
                        proformasDetalle.Remove(LproformaDetalle.ElementAt(0))
                        Dim strSeleccion As String = Me.UnidadesSeleccionadas
                        Dim strUnidad As String = arr(0).ToString() + ":" + arr(1).ToString() + "-" + arr(2).ToString()
                        If strSeleccion.Length = strUnidad.Length Then
                            strSeleccion = Nothing
                        Else
                            Dim intPosicion As Int32 = strSeleccion.IndexOf(strUnidad)
                            If intPosicion = 0 Then
                                strSeleccion = strSeleccion.Substring(strUnidad.Length + 1)
                            Else
                                Dim strParteInicio As String = strSeleccion.Substring(0, intPosicion - 1)
                                Dim strParteFin As String = strSeleccion.Substring(intPosicion + strUnidad.Length)
                                strSeleccion = strParteInicio + strParteFin
                            End If
                        End If
                        Me.UnidadesSeleccionadas = strSeleccion
                        Dim unidadEliminar As String = arr(0).ToString.Trim + ":" + _
                                                       arr(1).ToString.Trim + "-" + _
                                                       arr(2).ToString.Trim
                        If Not Me.UnidadesSeleccionadas Is Nothing Then
                            Me.UnidadesSeleccionadas = Me.UnidadesSeleccionadas.Replace(unidadEliminar + ",", "").Replace(",,", ",")
                            Me.UnidadesSeleccionadas = Me.UnidadesSeleccionadas.Replace(unidadEliminar, "").Replace(",,", ",")
                        End If
                        hdfUnidadesSeleccionadas.Value = Me.UnidadesSeleccionadas
                        mostrarDetalleProforma(proformasDetalle)
                        gvwLista.DataSource = proformasDetalle
                        gvwLista.DataBind()
                        gvwLista.RenderControl(htm)
                        htm.Flush()

                        '**** MPE
                        Dim montoDscto As Decimal = (From countPd As EproformaDetalle In Me.sDetalleProforma _
                                                     Where countPd.idTpoInmueble = 1 OrElse countPd.idTpoInmueble = 2 _
                                                     Select countPd.monto).Sum()
                        vValoresMontos = vValoresMontos + "@" + montoDscto.ToString("###,##0.00")
                        '*** FIN MPE

                        If idTpo.Equals(1) OrElse idTpo.Equals(2) Then
                            Me.sProformaDescuento = Nothing
                            _callbackArgument = "divgvwLista" + "|mostrarMontoDetalle|" + vValoresMontos + "||Del|0|" + updateGridDscto(Me.sProformaDescuento) + "|" + sr.ToString()
                        Else
                            _callbackArgument = "divgvwLista" + "|mostrarMontoDetalle|" + vValoresMontos + "||Del|" + Me.sProformaDescuento.Count.ToString + "||" + sr.ToString()
                        End If
                    Case "divEntidadFin"
                        entidades = Session("listaEntidadesFinancieras")
                        Dim Lentidad = From v In entidades _
                                       Where v.idEntidadFin.ToString = varParams(1).ToString _
                                       Select v
                        If varParams(2).ToString.Equals("N") Then
                            _callbackArgument = varParams(0).ToString + "|divEntidadFin|N|" + Lentidad.ElementAt(0).porcInteres.ToString
                        Else
                            _callbackArgument = varParams(0).ToString + "|divEntidadFin|S|" + Lentidad.ElementAt(0).tasaEfectivaAnual.ToString + "|" _
                                                                                            + Lentidad.ElementAt(0).tasaEfectivaMensual.ToString + "|" _
                                                                                            + Lentidad.ElementAt(0).portesComisiones.ToString + "|" _
                                                                                            + Lentidad.ElementAt(0).factorSeguro.ToString + "|" _
                                                                                            + Lentidad.ElementAt(0).montoBono.ToString("###,###,##0.00") + "|" _
                                                                                            + Lentidad.ElementAt(0).tasaInteresActiva.ToString
                        End If
                    Case "divSCAgregar"
                        simuladorCtas = Me.SimuladorCuotas
                        If simuladorCtas Is Nothing Then
                            simuladorCtas = New List(Of EsimuladorCta)
                        End If
                        If simuladorCtas.Count < 5 Then
                            Dim id As String = Now.Hour.ToString + Now.Month.ToString + Now.Second.ToString
                            Dim simuladorCta As New EsimuladorCta
                            With simuladorCta
                                .idProyecto = Me.Master.idProyecto
                                .idEtapa = Me.Master.idEtapa
                                .idSimularCta = CType(id, Int32)
                                .precioInmueble = CType(varParams(2).ToString, String)
                                .ctaInicial = CType(varParams(3).ToString, String)
                                .saldoFinanciar = CType(varParams(4).ToString, String)
                                .entidadFinanciar = New EentidadFin(CType(varParams(5), Int32), CType(varParams(6), String))
                                .descEntidadFin = CType(varParams(6), String)
                                .plazoAño = CType(varParams(7), Int32)
                                .tasaInteresAnual = CType(varParams(8), Decimal)
                                .tasaInteresMensual = CType(varParams(9), Decimal)
                                .valorCta = CType(varParams(10), Decimal)
                                If CType(varParams(11), Boolean) Then
                                    .miVivienda = 1
                                Else
                                    .miVivienda = 0
                                End If
                                .plazoAñoBono = CType(varParams(12), Int32)
                                .montoBono = CType(varParams(13), Decimal)
                                .tasaInteresActiva = CType(varParams(14), Decimal)
                                .valorCtaBono = CType(varParams(15), Decimal)
                                .ctaNeta = CType(varParams(16), Decimal)
                                .idUsuario = Me.Master.idUsuario
                            End With
                            simuladorCtas.Add(simuladorCta)
                        End If
                        Me.SimuladorCuotas = simuladorCtas
                        gvwSCDetalle.DataSource = simuladorCtas
                        gvwSCDetalle.DataBind()
                        gvwSCDetalle.RenderControl(htm)
                        htm.Flush()
                        _callbackArgument = varParams(0).ToString + "|divSCAgregar|" + (CType(varParams(1), Int32) + 1).ToString() + "|" + sr.ToString()
                    Case "divEliminarSimulador"
                        simuladorCtas = Me.SimuladorCuotas
                        Dim simluladoCtasNew As New List(Of EsimuladorCta)
                        If simuladorCtas IsNot Nothing AndAlso simuladorCtas.Count > 0 Then
                            For Each sc As EsimuladorCta In simuladorCtas
                                If sc.idSimularCta <> CType(varParams(1), Int32) Then
                                    simluladoCtasNew.Add(sc)
                                End If
                            Next
                            Me.SimuladorCuotas = simluladoCtasNew
                            gvwSCDetalle.DataSource = simluladoCtasNew
                            gvwSCDetalle.DataBind()
                            gvwSCDetalle.RenderControl(htm)
                            htm.Flush()
                            _callbackArgument = varParams(0).ToString + "|divSCAgregar||" + sr.ToString()
                        End If
                    Case "divFindPosCliente"
                        gvwPosClientes.DataSource = RposibleCliente.Filtra_NombreApePaternoApeMaterno(Me.Master.descEmpresa, False, varParams(1).ToString)
                        gvwPosClientes.DataBind()
                        gvwPosClientes.RenderControl(htm)
                        htm.Flush()
                        _callbackArgument = "divgvwPosCliente|" + sr.ToString()
                End Select
            End If
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
#End Region

End Class